#!/bin/bash

set -e

source common.sh

# https://stats.stackexchange.com/questions/24934/command-line-tool-to-calculate-basic-statistics-for-stream-of-values
# 文章推荐了多种工具如 Rscript, st(ubuntu install st-console), simple-r(perl written), octave

# https://www.gnu.org/software/datamash/examples/
t_datamash() {
    # 对第1列数据求平均，percentiles
    seq 10 | tr ' ' '\n' | datamash mean 1 perc:50 1 perc:90 1 perc:99 1
    f=testdata/pg-insert-lat.log

    echo_red "check pg-insert latency data"
    # 原来的第2行从0开始，现改为从1计数
    grep 'i:' $f | awk '{$2=$2+1; print $2","$4}' > a.1

    # 第一行前插入header
    sed -i '1i op-idx,pg-insert-latency(us)' a.1
    # 显示第一行header, 分隔符是 ,
    datamash -H -t, mean 2 perc:50 2 perc:90 2 perc:99 2 < a.1 | column -s, -t
    datamash -H -t, perc:25 2 perc:75 2 q1 2 q3 2 < a.1 | column -s, -t

    # https://blog.csdn.net/ada0915/article/details/97372309
    g=/usr/share/datamash/examples/scores.txt
    echo_blue "checking $g"
    # 先排序，然后根据第二字段分组，最后统计分组中第二字段的元素出现的次数
    datamash -s groupby 2 count 2 < $g
    # 先排序，然后根据第二字段分组，最后输出分组中第三字段的最小值和最大值
    datamash -s groupby 2 min 3 max 3 < $g

    echo_red "datamash -s groupby 2 mean 3 pstdev 3 < $g"
    # 先排序，然后根据第二字段分组，最后输出分组中第三字段的均值和总体标准偏差
    datamash -s -H groupby 2 mean 3 pstdev 3 < $g

    # 先排序，然后根据第二字段分组，最后输出分组中第三字段的中位数、第一个四分位数值、第三个四分位数值和四分位差
    #   q1 & q3: 第一个四分位数值(P25) & 第三个四分位数值 (P75)
    #   iqr: 四分位差。它是上四分位数（Q3，即位于75%）与下四分位数（Q1，即位于25%）的差
    datamash -s -H groupby 2 median 3 q1 3 q3 3 iqr 3  < $g | column -t
}

t_datamash